#ifndef SELECT_H
#define SELECT_H

#include "expression.h"

#include <vector>
#include <string>
using namespace std;

/*
    Class : Select
    Represents an SQL Select clause.
*/class Select
{
    /* Section: public */
    public:
        /*
            Constructor: Default constructor
            Initializes the object.
        */
        Select(vector<Expression *> * select = NULL);

        /*
            Destructor: Default destructor.
            Destroy the object.
        */
        virtual ~Select();

        /*
            Constructor: Copy constructor.
            Initializes the object as copy from other Select object.
        */
        Select(const Select& other);

        /*
            Method: AddExpression
            Adds a new Expression object to the Select object.
        */
        void addExpression(Expression * expression);

        /*
            Method: toString
            Returns:
                A string representation of the select clause.
        */
        string toString();

        /*
            Method: clone
            Returns:
                A clone of this object.
        */
        Select * clone();

        /*
            Method: getSelectExpressions
            Returns:
                The expressions of the select clause.
        */
        vector<Expression *> * getSelectExpressions();

    /* Section: private */
    private:
        /*
            Variable: expressions;
            Type: vector of Expression objects.
        */
        vector<Expression *> * expressions;
};

#endif // SELECT_H
